package com.ctesi.service.zhongbiao;



import com.ctesi.utils.PutUtil;
import com.ctesi.utils.StringExtract;
import org.springframework.stereotype.Service;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.processor.PageProcessor;

import java.awt.geom.CubicCurve2D;
import java.time.LocalDateTime;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static com.ctesi.utils.StringExtract.*;


//本类用于爬取所有页面中的招标url和相应url下的内容。
@Service
public class HuBeizhongbiaoProcessorService implements PageProcessor {

    @Override
    public void process(Page page) {

        //通过字符串比对正则表达式的方式处理对应的网页逻辑，展示当前的网页地址。
        String regex = "http://www\\.hbbidcloud\\.cn/hubei/jyxx/004004/.*-.*\\.html";
        String url1 = page.getUrl().get();
        System.out.println("当前的爬取的url为：" + url1);


        //url裂变逻辑
        if (!page.getUrl().get().matches(regex)) {
            System.out.println("-----------------正在对url进行裂变-------------------");

            // 可能会抛出异常的代码,有些页面的招标链接不足19条，一般是最后一页，所以使用太try。
            for (int i1 = 1; i1 <= 19; i1++) {

                //爬取所有页面的招标公告链接
                try {

                    //如果连接中含有about的话，表示是起始页面，将爬取所有招标公告的链接
                    String url = "http://www.hbbidcloud.cn" + page.getHtml().xpath(String.format("/html/body/div[2]/div[2]/div[2]/div/div[2]/ul/li[%d]/div/a/@href", i1)).toString();
                    //判断招标公告的发布时间是否是2023年，如果是，则爬取该招标公告。
                    String biddingPubTime = page.getHtml().xpath(String.format("/html/body/div[2]/div[2]/div[2]/div/div[2]/ul/li[%d]/span/text()", i1)).toString();
                    if (biddingPubTime.contains("2023")) {
                        page.addTargetRequest(url); //添加到待爬网址中
//                        System.out.println("添加" + url + "成功！");
                    } else {
                        System.out.println("招标公告非2023年，舍去。" + i1);
                    }


                } catch (Exception e) {
                    System.out.println("-------------全部招标链接爬取完毕，当前页面共爬取" + i1 + "条招标公告-----------");
                    break;
                }


            }


        }

        //内容抓取逻辑
        if (page.getUrl().get().matches(regex)) {
            //内容页面，直接抓取对应的内容。
            System.out.println("------------------开始爬取内容-----------");
            //获取招标内容主体
            String context = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody").get();
            String context1 = StringExtract.removeTags(context);
            String context2 = StringExtract.removeEmptyLines(context1);
            String bidContext = StringExtract.removeTags(removeSpaces(context2));

            //当前爬取的url
            page.putField("zhongbiaoUrl", page.getUrl().get());

            //中标编号
            PutUtil.putField(page, bidContext,"招标编号：(.*?)\\n","zhongbiaoId");

            //第一名
            String peopleOne = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[2]/td[2]/text()").toString();
            page.putField("peopleOne",peopleOne);

            //第二名
            String peopleTwo = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[2]/td[3]/text()").toString();
            page.putField("peopleTwo",peopleTwo);

            //第三名
            String peopleThree = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[2]/td[4]/text()").toString();
            page.putField("peopleThree",peopleThree);

            //第一名投标价
            String priceOne = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[3]/td[2]/text()").toString();
            page.putField("priceOne",priceOne);

            //第二名投标价
            String priceTwo = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[3]/td[3]/text()").toString();
            page.putField("priceTwo",priceTwo);

            //第三名投标价
            String priceThree = page.getHtml().xpath("/html/body/div[2]/div[2]/div/div[2]/div/table/tbody/tr[6]/td[1]/table/tbody/tr[3]/td[4]/text()").toString();
            page.putField("priceThree",priceThree);

        }


    }


}







